package br.com.yahoo.mau_mss.tutorlucene.web;

import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import br.com.yahoo.mau_mss.tutorlucene.model.Curriculum;
import br.com.yahoo.mau_mss.tutorlucene.service.CurriculumException;
import br.com.yahoo.mau_mss.tutorlucene.service.CurriculumService;
import br.com.yahoo.mau_mss.tutorlucene.util.Constants;

/**
 * Bean CDI para adição de novos currículos.
 * 
 * @author Paulo Sigrist / Wilson A. Higashino
 * import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
 */
//@RequestScoped
//@Named
@RequestScoped
@ManagedBean(name = "addBean")
public class AddBean {
  /** Currículo a ser adicionado. */
  private Curriculum cv;

  /** Bean de serviço. Injetado pelo container. */
  //@Inject
  @ManagedProperty("#{curriculumServiceBean}")
  private CurriculumService service;
  private static final Logger log = Logger.getLogger(AddBean.class.getName());

  /**
   * Construtor padrão. Cria uma nova instância de Curriculum
   */
  public AddBean() {
    this.cv = new Curriculum();
  }

  /**
   * @return Retorna a instância de Curriculum
   */
  public Curriculum getCv() {
    return cv;
  }

  /**
   * Adiciona e indexa um novo curr�culo.
   * 
   * @return {@link Constants#MAIN} se o currículo foi adicionado corretamente
   *         ou {@link Constants#ADD_CV} caso ocorra algum erro
   */
  public String addCurriculum() {
    String r;
    FacesContext context = FacesContext.getCurrentInstance();
    try {
      // Chama o serviço para adicionar e indexar o currículo
      service.addCurriculum(cv);
      // Usuário será redirecionado para a página principal
      r = Constants.MAIN;
      // Adicionar uma mensagem de sucesso
      context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
          "Sucesso", "Currículo adicionado com sucesso."));
    } catch (CurriculumException e) {
      // Algum erro aconteceu ao inserir o currículo.
      // Redirecionar o usuario para a página de adição
      // para outra tentativa
      r = Constants.ADD_CV;
      // Adicionar a mensagem de erro no contexto
      context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
          "Erro", e.getMessage()));
      log.warning("Gerou uma exceção tratada: " + e.getMessage());
    }
    return r;
  }

  /**
   * @param service the service to set
   */
  public void setService(CurriculumService service) {
    this.service = service;
  }
}
